home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / HardwareProjects / VideoText.lha / VideoText4.2 / source / startup.p < prev    next >
Encoding:
Text File  |  1995-06-26  |  5.7 KB  |  166 lines

  1. UNIT startup; {$project vt }
  2. { Wertet die Programmstartargumente für VideoText aus }
  3.  
  4. INTERFACE; FROM vt USES jobs;
  5.  
  6. PROCEDURE get_args;
  7.  
  8. { ---------------------------------------------------------------------- }
  9.  
  10. IMPLEMENTATION;
  11.  
  12. {$opt q,s+,i+ } { keine Laufzeitprüfungen außer Stack und Feldindizes }
  13. {$incl "workbench/startup.h", "icon.lib", "dos.lib" }
  14.  
  15. PROCEDURE get_args;
  16. { wertet CLI- oder WorkBench-Argumente aus }
  17. { ToolTypes:                  CLI-Parameter:  }
  18. { PALETTE=<rgb>,<rgb>,...     -p<rgb>,<rgb>,... }
  19. { FILE=<output name>          -f=<output name> }
  20. { ICONPATH=<pathname>         -i=<pathname> }
  21. { EDITOR=<dos command>        -e=<dos command> }
  22. { CONFIGPATH=<pathname>       -c=<pathname> }
  23. { MAXWAIT=<seconds>           -w<seconds> }
  24. { BUSDELAY=<counter>          -d<counter> }
  25. { BURST=<tics>                -b<tics> }
  26. { SHUFFLE=<tics>              -s<tics> }
  27. {                             <page> <page> ... }
  28. {                             <file> <file> ... }
  29. VAR s: ^String[1000];
  30.     len,i,j,k,ok,gelesen: Integer;
  31.     name,colors: str80;
  32.     is_job: Boolean;
  33.     hail: p_WBStartup;
  34.     arg: p_WBArg;
  35.     olddir: BPTR;
  36.     icon: p_DiskObject;
  37.     entry: Str;
  38. FUNCTION is_space(ch: Char): Boolean;
  39.   BEGIN  is_space := (ch=' ') OR (ch=#9) OR (ch=#10) OR (ch=#13);  END;
  40. BEGIN
  41.   gelesen := 0;
  42.   colors := '';
  43.   IF fromWB THEN BEGIN    { *** WorkBench-Start }
  44.     OpenLib(IconBase,'icon.library',0);
  45.     hail := StartupMessage;
  46.     arg := hail^.sm_ArgList;
  47.     FOR i := 1 to hail^.sm_NumArgs DO BEGIN
  48.       olddir := CurrentDir(arg^.wa_Lock);
  49.       name := arg^.wa_Name;
  50.       IF i=1 THEN BEGIN  { 1. Datei: das Programm selbst, ToolTypes checken }
  51.         icon := GetDiskObject(name);
  52.         IF icon<>Nil THEN BEGIN
  53.           entry := FindToolType(icon^.do_ToolTypes, 'PALETTE');
  54.           IF Ptr(entry)<>Nil THEN
  55.             colors := entry;
  56.           entry := FindToolType(icon^.do_ToolTypes, 'FILE');
  57.           IF Ptr(entry)<>Nil THEN
  58.             outputname := entry;
  59.           entry := FindToolType(icon^.do_ToolTypes, 'ICONPATH');
  60.           IF Ptr(entry)<>Nil THEN
  61.             iconpath := entry;
  62.           entry := FindToolType(icon^.do_ToolTypes, 'EDITOR');
  63.           IF Ptr(entry)<>Nil THEN
  64.             editor := entry;
  65.           entry := FindToolType(icon^.do_ToolTypes, 'CONFIGPATH');
  66.           IF Ptr(entry)<>Nil THEN
  67.             configpath := entry;
  68.           entry := FindToolType(icon^.do_ToolTypes, 'MAXWAIT');
  69.           IF Ptr(entry)<>Nil THEN
  70.             Val(entry,maxwait,ok);
  71.           entry := FindToolType(icon^.do_ToolTypes, 'BUSDELAY');
  72.           IF Ptr(entry)<>Nil THEN
  73.             Val(entry,busdelay,ok);
  74.           entry := FindToolType(icon^.do_ToolTypes, 'BURST');
  75.           IF Ptr(entry)<>Nil THEN
  76.             Val(entry,burst,ok);
  77.           entry := FindToolType(icon^.do_ToolTypes, 'SHUFFLE');
  78.           IF Ptr(entry)<>Nil THEN
  79.             Val(entry,shuffle,ok);
  80.           FreeDiskObject(icon);
  81.         END;
  82.       END ELSE BEGIN  { zusätzliche Dateien: enthalten Seiten, einlesen }
  83.         IF filetype(name)=1 THEN
  84.           gelesen := gelesen + getpages(name);
  85.         olddir := CurrentDir(olddir);
  86.       END;
  87.       { auf nächsten WBArg-Zeiger zugreifen: }
  88.       arg := Ptr(Long(arg)+SizeOf(WBArg));
  89.     END;
  90.     CloseLib(IconBase);
  91.   END ELSE IF ParameterLen>0 THEN BEGIN    { *** CLI-Start }
  92.     s := ParameterStr;
  93.     len := ParameterLen;
  94.     { Parameterzeile in Worte zerlegen, wie der argv[] in C es schon ist :-( }
  95.     i := 1; WHILE i<=len DO BEGIN
  96.       WHILE is_space(s^[i]) AND (i<len) DO Inc(i);
  97.       j := i + 1;
  98.       IF s^[i]='"' THEN BEGIN
  99.         Inc(i); while (s^[j]<>'"') AND (j<=len) do Inc(j);
  100.       END ELSE BEGIN
  101.         while NOT is_space(s^[j]) AND (j<=len) do Inc(j);
  102.       END;
  103.       { Zeiger i: 1. Zeichen des Wortes, j: 1. Trennzeichen dahinter }
  104.       IF s^[i]='-' THEN BEGIN
  105.         i := i+2;
  106.         CASE s^[i-1] OF
  107.           'f': BEGIN
  108.               IF s^[i] = '=' THEN Inc(i);
  109.               IF j>i THEN  outputname := Copy(s^,i,j-i);
  110.             END;
  111.           'i': BEGIN
  112.               IF s^[i] = '=' THEN Inc(i);
  113.               IF j>i THEN  iconpath := Copy(s^,i,j-i);
  114.             END;
  115.           'e': BEGIN
  116.               IF s^[i] = '=' THEN Inc(i);
  117.               IF j>i THEN  editor := Copy(s^,i,j-i);
  118.             END;
  119.           'c': BEGIN
  120.               IF s^[i] = '=' THEN Inc(i);
  121.               IF j>i THEN  configpath := Copy(s^,i,j-i);
  122.             END;
  123.           'p': colors := Copy(s^,i,j-i);
  124.           'd': Val(copy(s^,i,j-i),busdelay,ok);
  125.           'w': Val(copy(s^,i,j-i),maxwait,ok);
  126.           'b': Val(copy(s^,i,j-i),burst,ok);
  127.           's': Val(copy(s^,i,j-i),shuffle,ok);
  128.           OTHERWISE BEGIN
  129.             WriteLn('illegal parameter: ',Copy(s^,i,j-i));
  130.           END;
  131.         END;
  132.       END ELSE BEGIN
  133.         { Was nur aus '0123456789/*' besteht, ist eine Seitennummer, alles andere eine }
  134.         { Eingabedatei. }
  135.         is_job := True;
  136.         FOR k := i TO j-1 DO
  137.           IF NOT (s^[k] IN ['0'..'9','/','*','.','!']) THEN is_job := False;
  138.         name := Copy(s^,i,j-i);
  139.         IF is_job THEN
  140.           add_job(name,True)
  141.         ELSE IF filetype(name)=1 THEN
  142.           gelesen := gelesen + getpages(name)
  143.         ELSE
  144.           WriteLn('no VT-pages found in file "',name,'"');
  145.       END;
  146.       i := j + 1;
  147.     END;
  148.   END;
  149.   IF (queued=0) AND (gelesen=0) THEN
  150.     add_job('100/*',True);
  151.   IF editor<>'' THEN
  152.     IF editor[Length(editor)]<>' ' THEN editor := editor + ' ';
  153.   IF iconpath<>'' THEN
  154.     IF NOT (iconpath[Length(iconpath)] IN [':','/']) THEN
  155.       iconpath := iconpath + '/';
  156.   IF configpath<>'' THEN
  157.     IF NOT (configpath[Length(configpath)] IN [':','/']) THEN
  158.       configpath := configpath + '/';
  159.   IF colors<>'' THEN
  160.     FOR i := 0 TO 7 DO
  161.       palette[i] := hexval(Copy(colors,4*i+1,3));
  162. END;
  163.  
  164. BEGIN  { Initialisierung }
  165. END.
  166.